home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-05-17 | 7.1 KB | 262 lines | [TEXT/PJMM] |
- program GRAFArcade;{we could use a modified sprite array for this program for life, punching, etc. but for only two guys}
- {it isn't worth the trouble}
- uses
- graphics;
-
- var
- temp: integer;
- l: longint;
- whatkeyhit: integer;
- greenlife, bluelife: integer;
- aa, ab: rect;{aa=the entire cicn size, ab=the size to use when testing for collisions}
- greenwalkright, greenwalkleft: array[0..3] of Face;
- greenpunchright, greenpunchleft: array[0..2] of Face;
- greenhurtright, greenhurtleft: Face;
- bluewalkright, bluewalkleft: array[0..3] of Face;
- bluepunchright, bluepunchleft: array[0..2] of Face;
- bluehurtright, bluehurtleft: Face;
- greenpowerbar, bluepowerbar: Face;
- greenpunch, bluepunch: integer;
- greenleftright, blueleftright: boolean;{each of these variables tells whether the guy is facing right or left. True is right}
- {false means that guy is facing left.}
- procedure getkey; {feel free to copy and use this keyboard strobing routine in your programs!!!!!!!}
- var
- theEvent: EventRecord;
- begin
- whatkeyhit := 0;
- if GetOSEvent(keyDownMask + autoKeyMask, theEvent) then
- begin
- case char(bitand(theEvent.message, charCodeMask)) of
- 'd', 'D':
- whatkeyhit := 1;{green guy walk left}
- 'f', 'F':
- whatkeyhit := 2;{green guy walk right}
- 'g', 'G':
- whatkeyhit := 3;{green guy punch}
- 'j', 'J':
- whatkeyhit := 4;{blue guy walk left}
- 'k', 'K':
- whatkeyhit := 5;{blue guy walk right}
- 'h', 'H':
- whatkeyhit := 6;{blue guy punch}
- otherwise
- end;
- end;
- end;
-
- procedure setupgreenguy (var me: sprite);
- begin
- me.mode := 0;{this line is not really neccessary, since all variables are set to zero at the start, but it helps us keep}
- greenpunch := 0;
- greenleftright := true;
- end; {track of what is going on}
-
- procedure greenaction (var me: sprite);
- begin
- if greenpunch <> 0 then
- begin
- me.mode := (me.mode + 1) mod 3;
- if me.mode = 0 then
- begin
- greenpunch := 0;
- if greenleftright = true then
- me.theface := greenwalkright[me.mode]
- else
- me.theface := greenwalkleft[me.mode];
- end
- else
- begin
- if greenleftright = true then
- me.theface := greenpunchright[me.mode]
- else if greenleftright = false then
- me.theface := greenpunchleft[me.mode];
- end;
- end
- else if greenpunch = 0 then
- begin
- if greenleftright = true then
- me.theface := greenwalkright[me.mode]
- else
- me.theface := greenwalkleft[me.mode];
- if whatkeyhit = 1 then
- begin
- me.position.h := me.position.h - 10;
- me.mode := (me.mode + 1) mod 4;
- me.theface := greenwalkleft[me.mode];
- greenleftright := false;
- end
- else if whatkeyhit = 2 then
- begin
- me.position.h := me.position.h + 10;
- me.mode := (me.mode + 1) mod 4;
- me.theface := greenwalkright[me.mode];
- greenleftright := true;
- end
- else if (whatkeyhit = 3) and (greenleftright = true) then
- begin
- me.mode := 0;
- me.theface := greenpunchright[me.mode];
- greenpunch := 1;
- end
- else if (whatkeyhit = 3) and (greenleftright = false) then
- begin
- me.mode := 0;
- me.theface := greenpunchleft[me.mode];
- greenpunch := 1;
- end;
- end;
- end;
-
- procedure greenhit (var me, him: sprite);
- begin
- if (greenpunch = 1) and (me.mode = 1) then
- begin
- playsound(true);
- if blueleftright = true then
- him.theface := bluehurtright
- else
- him.theface := bluehurtleft;
- bluelife := bluelife - 1;
- if bluelife = 0 then
- killsprite(him);
- end;
- end;
-
- procedure setupblueguy (var me: sprite);
- begin
- me.mode := 0;
- bluepunch := 0;
- blueleftright := false;
- end;
-
- procedure blueaction (var me: sprite);
- begin
- if bluepunch <> 0 then
- begin
- me.mode := (me.mode + 1) mod 3;
- if me.mode = 0 then
- begin
- bluepunch := 0;
- if blueleftright = true then
- me.theface := bluewalkright[me.mode]
- else
- me.theface := bluewalkleft[me.mode];
- end
- else
- begin
- if blueleftright = true then
- me.theface := bluepunchright[me.mode]
- else if blueleftright = false then
- me.theface := bluepunchleft[me.mode];
- end;
- end
- else if bluepunch = 0 then
- begin
- if blueleftright = true then
- me.theface := bluewalkright[me.mode]
- else
- me.theface := bluewalkleft[me.mode];
- if whatkeyhit = 4 then
- begin
- me.position.h := me.position.h - 10;
- me.mode := (me.mode + 1) mod 4;
- me.theface := bluewalkleft[me.mode];
- blueleftright := false;
- end
- else if whatkeyhit = 5 then
- begin
- me.position.h := me.position.h + 10;
- me.mode := (me.mode + 1) mod 4;
- me.theface := bluewalkright[me.mode];
- blueleftright := true;
- end
- else if (whatkeyhit = 6) and (blueleftright = true) then
- begin
- me.mode := 0;
- me.theface := bluepunchright[me.mode];
- bluepunch := 1;
- end
- else if (whatkeyhit = 6) and (blueleftright = false) then
- begin
- me.mode := 0;
- me.theface := bluepunchleft[me.mode];
- bluepunch := 1;
- end;
- end;
- end;
-
- procedure bluehit (var me, him: sprite);
- begin
- if (bluepunch = 1) and (me.mode = 1) then
- begin
- playsound(true);
- if greenleftright = true then
- him.theface := greenhurtright
- else
- him.theface := greenhurtleft;
- greenlife := greenlife - 1;
- if greenlife = 0 then
- killsprite(him);
- end;
- end;
-
- procedure bluebartask (var me: sprite);
- begin
- setrect(me.theface.sizerect, 0, 0, bluelife * 20, 20);
- end;
-
- procedure greenbartask (var me: sprite);
- begin
- setrect(me.theface.sizerect, 0, 0, greenlife * 20, 20);
- end;
-
- procedure setupsprite;
- var
- a: integer;
- begin
- getsound(1);
- setrect(aa, 0, 0, 64, 64);
- setrect(ab, 12, 0, 52, 64);
- for a := 0 to 3 do
- greenwalkright[a] := newface(a + 1, aa, ab);
- for a := 0 to 3 do
- greenwalkleft[a] := newface(a + 5, aa, ab);
- for a := 0 to 2 do
- greenpunchright[a] := newface(a + 9, aa, ab);
- for a := 0 to 2 do
- greenpunchleft[a] := newface(a + 12, aa, ab);
- greenhurtright := newface(15, aa, ab);
- greenhurtleft := newface(16, aa, ab);
- for a := 0 to 3 do
- bluewalkright[a] := newface(a + 17, aa, ab);
- for a := 0 to 3 do
- bluewalkleft[a] := newface(a + 21, aa, ab);
- for a := 0 to 2 do
- bluepunchright[a] := newface(a + 25, aa, ab);
- for a := 0 to 2 do
- bluepunchleft[a] := newface(a + 28, aa, ab);
- bluehurtright := newface(31, aa, ab);
- bluehurtleft := newface(32, aa, ab);
- greenlife := 5;
- bluelife := 5;
- setrect(aa, 0, 0, 100, 20);
- setrect(aa, 0, 0, 100, 20);
- greenpowerbar := newface(33, aa, ab);
- bluepowerbar := newface(34, aa, ab);
- temp := NewSprite(1, 50, 215, 0, greenwalkright[0], @greenaction, @greenhit, @setupgreenguy);
- temp := NewSprite(2, 400, 215, 0, bluewalkleft[0], @blueaction, @bluehit, @setupblueguy);
- temp := NewSprite(0, 50, 300, 0, greenpowerbar, @greenbartask, nil, nil);
- temp := NewSprite(0, 360, 300, 0, bluepowerbar, @bluebartask, nil, nil);
- end;
-
- begin
- GRAFInit(1, 512, 342);
- setupsprite;
- repeat
- l := tickcount;
- getkey;
- RunGRAF(1);
- while l > tickcount - 10 do
- ;
- until button;
- end.